#include "Energia.h"
#include "Timer.h"


enum BlinkMode { SLOW, FAST }; // 定义LED闪烁模式
volatile BlinkMode currentMode = SLOW; // 当前模式，默认为慢速
volatile bool ledState = false; // LED状态，默认关闭
volatile uint32_t counter = 0; // 定时器中断计数器

// 定时器中断处理函数
void handleTimerInterrupt() {
  counter++; // 每次中断递增计数器

  // 根据当前模式切换LED状态
  if (currentMode == SLOW) {
    if (counter >= 200) { // 慢速模式：200次中断后切换（约2秒）
      counter = 0; // 重置计数器
      ledState = !ledState; // 切换LED状态
      digitalWrite(43, ledState); // 更新LED状态
    }
  } else if (currentMode == FAST) {
    if (counter >= 10) { // 快速模式：10次中断后切换（约100毫秒）
      counter = 0; // 重置计数器
      ledState = !ledState; // 切换LED状态
      digitalWrite(43, ledState); // 更新LED状态
    }
  }
}

void setup() {
  pinMode(43, OUTPUT); // 设置LED引脚为输出模式
  digitalWrite(43, LOW); // 初始关闭LED
  pinMode(PUSH2, INPUT_PULLUP); // 设置按钮引脚为上拉输入模式

  // 设置定时器中断，每10毫秒触发一次
  SetTimer(handleTimerInterrupt, 10);
}

void loop() {
  static bool lastButtonState = HIGH; // 上一次按钮状态，初始为高电平
  bool currentState = digitalRead(PUSH2); // 当前按钮状态

  // 检测按钮状态变化
  if (currentState != lastButtonState) {
    delay(50); // 去抖动
    currentState = digitalRead(PUSH2); // 再次读取按钮状态
    if (currentState == LOW) { // 按钮按下
      currentMode = FAST; // 切换到快速模式
      counter = 0; // 重置计数器
    } else { // 按钮释放
      currentMode = SLOW; // 切换到慢速模式
      counter = 0; // 重置计数器
    }
  }
  lastButtonState = currentState; // 更新按钮状态
}
